Назад
Управление умным домом
Умный дом на Arduino своими руками
Сегодня наблюдается рост интереса пользователей к внедрению в домах и квартирах если не полноценных систем «умного дома», то некоторых элементов Home Automation (домашней автоматизации).
В связи с этим производители ведут разработки и наращивают выпуск систем различной сложности – от полноценных коробочных решений с использованием ИИ, до комплектов на базе микроконтроллеров, позволяющих быстро решать прикладные задачи различной сложности.
Некоторые из них помогут как сделать первые шаги в разработке, так и реализовать достаточно сложные проекты. Например¸ вполне реальный вариант – умный дом на Arduino своими руками.
Что такое Arduino
Arduino – это полностью открытая программно-аппаратная платформа для создания систем роботизации и автоматизации (в том числе, домашней) различной сложности. Ее основное отличие – простота в использовании, возможность освоения и создания вполне работоспособных проектов даже без глубоких знаний электроники и программирования.
Аппаратные средства Arduino позволяют получить сигналы от сенсоров (например, уровень температуры, наличие света, нажатие на кнопку) или более сложных систем, таких как html-страницы.
Программный код обрабатывает их и выдает сигналы на исполнительные механизмы, например, включает сервопривод, замыкает контакты реле или сервисы, способные выполнять весьма сложные операции – от отправки сообщений на e-mail до размещения контента на страницах.
Основными преимуществами платформы являются:
- Полная открытость. Это касается как аппаратных модулей (приводятся схемы и для большинства – печатные платы), так и программного обеспечения. В результате сторонние разработчики имеют возможность создавать полностью совместимые устройства. Сообществом создано множество программных проектов и модулей для решения различных задач автоматизации. Все они находятся в свободном доступе, так что подобрать нужный софт и адаптировать его под собственные потребности труда не составляет. Существует достаточно большое число и российских проектов, которые упоминаются на страницах официального сайта.
- Широкий выбор. В ассортименте предлагаемых продуктов – решения для любого уровня, от плат на 8-битных контроллерах с минимумом функциональных возможностей для начальных шагов и простых проектов, до мощных контроллеров на 32-битных чипах. Возможности подбора нужной конфигурации расширяет богатый ассортимент собственных модулей расширения и аппаратных продуктов сторонних разработчиков. Кроме того, приобрести продукты Arduino можно практически в любом виде – от печатной платы с набором компонентов для сборки своими руками, до готовых контроллеров и Starter Kits – специализированных наборов.
- Кроссплатформенность. Софт Arduino работает под всеми ОС для ПК – Windows, Linux, MacOS, сохраняя полную функциональность, а готовые программные наработки вообще являются платформенно независимыми.
- Гибкость подхода. На платах Arduino реализован весь необходимый функционал, – от стабилизатора питания и программатора для контроллера, до набора портов ввода/вывода и конкретных интерфейсов, например BlueTooth, Wi-Fi, управления двигателями и пр. Однако представленная система не ограничивает разработчика в выборе, например, прошивку микроконтроллера можно выполнить не только при помощи штатных средств, но также и с помощью совместимости программаторов других производителей, а набор портов и интерфейсов легко расширить.
- Простота освоения. Прозрачные схемотехнические решения, качественная документация позволяют работать с модулями платформами без серьезного опыта и знаний электроники. Этому способствует и программная среда, требующая лишь базовых знаний C++. Более того, проект предлагает и средства графического проектирования, освоить которые могут даже дети и подростки.
- Стоимость. Микроконтроллеры Arduino на сегодняшний день являются одним из самых более доступных в ценовой среде вариантов среди множественных более модифицированных аналогов – даже самый мощный микроконтроллер обойдется покупателю не дороже 50 долларов. На рынке можно найти множество разнообразных расширений и компонентов, которые выпускаются различными производителями, в том числе и азиатскими, которые при достаточно достойном качестве изготовления стоят весьма недорого.
Как сделать умный дом на Arduino своими руками
Создание умного дома на Arduino своими руками мало чем отличается от разработки и реализации любой другой электронной системы. Процесс включает несколько обязательных этапов.
Обратитесь к нам и наш специалист бесплатно составит смету ➯Заказать услугу
Разработка эскизного проекта
На первом этапе составляется подробный проект будущей системы. При создании системы для собственных дома или квартиры, хозяин выступает и заказчиком, и исполнителем. Соответственно, этот этап включает и составление подробного ТЗ и эскизное проектирование.
Соответственно, разработчику придется решить несколько задач.
Формулировка задания
Задание для проекта должно быть определено максимально точно и подробно. Например, решается одна из частных home automation – включить освещение крыльца, когда в темное время к нему приближается человек. Это общее описание задачи нуждается в более конкретных формулировках для проектирования.
Они описывают:
- Основные условия для срабатывания автоматики – триггеры (triggers) в терминах home automation. В рассматриваемой задаче такой триггер один – приближение человека к крыльцу.
- Дополнительные условия (conditions). Они задают разрешения на срабатывание триггера и, в большинстве случаев, определяют длительность их действия. Для данной задачи дополнительное условие – темное время. Действительно, включать свет на крыльце днем смысла не имеет. Нет необходимости делать это и когда крыльцо освещено – свет уже включен или задействованы другие источники. Соответственно, дополнительные условия можно задать в нескольких вариантах: наступило темное время суток, и свет на крыльце не включен. Практически полное описание условий, но не учитывает возможность освещения от других источников, освещенность на крыльце ниже порогового значения. Хотя условие и выглядит проще, но учитывает практически все случаи.
- Действия (actions). Описывает реакцию системы на триггеры и дополнительные условия. Для текущего примера система должна выполнить единственное действие – включить свет.
- Действия в случае отсутствия триггеров и/или невыполнения условий. Здесь необходимо рассматривать 2 случая: ни основные, ни дополнительные условия не были выполнены. Наиболее логичное поведение – бездействие, триггер и условия были выполнены, произошло срабатывание, затем ситуация изменилась (т.н. post-action действия). Поведение проектируемой системы должно выглядеть следующим образом – не включать свет до срабатывания триггера и выполнения условий, выключить после того, как он перестал быть нужен.
Таким образом, результат – подробное описание задания:
- Проверять, есть ли у крыльца человек.
- Бездействовать, пока его нет.
- Если человек подошел – проверить освещенность.
- Если она ниже заданной – включить свет.
- Проверять, остается ли нужен свет.
- Если да – оставаться в текущем состоянии, если нет – выключить свет.
Обратитесь к нам и наш специалист бесплатно составит смету ➯Заказать услугу
Выбор способов реализации алгоритма
На этом этапе определяется набор сенсоров для получения данных (триггеров и условий) и исполнительных механизмов для выполнения действий.
Даже в простейшем рассматриваемом случае возможны несколько вариантов реализации. Например, определять присутствие человека у крыльца можно:
- по сигналу стандартного инфракрасного датчика;
- разместив под площадкой у крыльца датчики, реагирующие на давление (например, тензодатчики на основе пьезоффекта);
- получая с работающего в квартире Wi-Fi-роутера сигнал о подключении нового/конкретного абонента к домашней беспроводной сети и т.д.
Аналогичным образом рассматриваются ситуации с определением уровня освещенности и включением света на крыльце.
Еще один обязательный момент, требующий учета на данном этапе – определение обмена данными между устройствами. Здесь также возможны несколько вариантов – обмен по сигнальным проводникам, беспроводная передача сигналов (в этом случае потребуется выбрать соответствующий стандарт, например, BlueTooth, Wi-Fi, ZigBee или др.).
Завершает этап запись алгоритма с учетом принятых решений, например:
- Опрашивать проводной ИК-датчик.
- Если сигнала нет – ничего не делать.
- При появлении сигнала, проверить состояние проводного датчика освещенности.
- При наличии сигнала – ничего не делать.
- При отсутствии сигнала – выдать на ZigBee хаб команду на включение выключателя по соответствующему адресу (отвечающему за освещение на крыльце).
- Опрашивать ИК датчик.
- Пока есть сигнал (человек на крыльце) – ничего не делать.
- Если сигнала нет – отключить свет, т.е. выдать на ZigBee выключатель команду на отключение.
- Вернуться к началу цикла.
Еще один результат этого этапа – перечень необходимого оборудования и материалов. Для сборки системы потребуются:
- Контроллер с возможностью опроса проводных каналов связи (минимум, двух, для датчика освещенности и ИК-датчика).
- ZigBee выключатель.
- ZigBee хаб (без него моно обойтись, если контроллер имеет интерфейс для прямого управления ZigBee устройствами).
Электрик с 20 летним стажем и богатым опытом
Не следует забывать о проводах для прокладки сигнальных линий, источниках питания для всех устройств, возможно – ретрансляторах или усилителях сигналов, если расстояния окажутся велики. Лучший вариант оформить результаты этапа – составить структурную схему системы и блок-схему алгоритма. Это существенно упростит работу в дальнейшем.
Выбор оборудования
После составления структурной схемы проекта можно приступать к разработке принципиальной, которая, прежде всего, включает выбор оборудования.
Выбор контроллера Arduino
Поскольку базовая платформа – Arduino, определена ранее, остается выбрать конкретную модель контроллера и, при необходимости, расширение. Задача не сложная, поскольку ассортимент устройств достаточно обширен и включает модели для большинства практических задач.
В список оборудования входят:
Контроллер
|
Чип
|
Память (ОЗУ/ПЗУ)
|
Порты ввода/вывода и интерфейсы
|
Дополнительно
|
Due
|
32-битный Cortex-M3 ARM SAM3U4E,, 84 МГц
|
64+36Кб/256+256Кб (возможна прямая адресация всего пространства)
|
54 цифровых IO (некоторые со специальными функциями, например, ШИМ)
12 аналоговых входов (с АЦП) 2 аналоговых входа |
Питание контроллера 3.3В
|
Uno
|
8-бит ATmega328 или ATmega8U2 (в новой версии), 16 МГц
|
2Кб/32Кб+1Кб EEPROM
|
14 цифровых IO (6 могут использоваться как ШИМ)
6 аналоговых входов с АЦП UART TTL USB Разъемы для модулей расширения |
|
Leonardo
|
8-бит ATmega32u4, 16МГц
|
2.5кБ/32Кб+1Кб EEPROM
|
20 цифровых IO (7 с функциями ШИМ)
12 аналоговых входов (могут работать как цифровые) USB расширения |
Встроенная поддержка USB позволяет настраивать видимость при связи с ПК (как клавиатуру, мышь, виртуальный последовательный порт)
Функционально и конструктивно аналогичен Uno |
Duemilanove,
Decimila |
8-бит ATmega168, 16МГц
|
1Кб/16Кб+512б EEPROM
|
В остальном полностью аналогичны Uno на базе ATmega328
|
|
Mini
|
8-бит ATmega168, 16МГц
|
1Кб/16Кб+512б EEPROM
|
14 цифровых IO (6 могут использоваться как ШИМ)
6 аналоговых входов с АЦП |
Для программирования требуется адаптер MiniUSB
Компактное решение для макетирования |
Micro
|
8-бит ATmega32u4, 16МГц
|
Компактный контролер, по функциональности и аналогичный Leonardo, для подключения и программирования используется кабель microUSB
|
||
Nano
|
8-бит ATmega168 или ATmega328, 16МГц
|
Компактный вариант Duemilanove, отличающийся только габаритами и отсутствием разъема для подключения внешнего источника питания
|
||
Mega
|
8-бит ATmega1280, 16МГц
|
8Кб/128Кб+4Кб EEPROM
|
54 цифровых IO (14 с функциями ШИМ)
16 аналоговых входов с АЦП 4 порта UART USB расширения |
|
Mega 2560
Mega ADK |
8-бит ATmega2560, 16МГц
|
Отличаются от Mega увеличенным до 256Кб объемом ПЗУ для хранения программ и реализацией USB-интерфейса на ATMega8U2. В Mega ADK сконфигурирован USB host, который моет работать с другими устройствами, в частности, смарифонами
|
||
Pro
|
8-бит ATmega328, 16МГц (3.3В) или
ATmega168, 8МГц (5В) |
2 или 1 Кб/32 или 16 Кб + 1 Кб или 512б EEPROM
|
14 цифровых IO (6 могут использоваться как ШИМ)
6 аналоговых входов с АЦП UART TTL USB Разъемы для модулей расширения |
Разъемы ввода/вывода и интерфейсов не установлены, разработчик может использовать собственные
|
Pro Mini
|
Аналогична Mini, но как и в полномасштабной Pro требуется установка разъемов
|
Внимание! Для работы с платами, не содержащими встроенных USB-интерфейсов применяют адаптеры Adapter Mini USB или USB Serial Light Adapter.
Кроме стандартных контроллеров разработаны и поставляются специализированные, с дополнительными интерфейсами на борту:
- Yun – устройство по возможностям (чип, выводы) аналогичное Leonardo, но со встроенным Wi-Fi модулем на базе Atheros AR9331.
- BT – платформа со встроенным BlueTooth интерфейсом.
- Fio – контроллер, аналогичный Uno по функциональности, но без установленных разъемов на портах ввода/вывода. Предназначен для работы в беспроводной сети ZigBee.
- Serial – функционально аналогична базовой Uno с интегрированным стандартным последовательным интерфейсом RS232.
Кроме того, для работы с различными стандартами связи и устройствами можно использовать стандартные платы расширения:
- Wi-Fi с поддержкой протокола 802.11 b/g;
- Xbee Shield, с интегрированным модулем Maxstream Xbee Zigbee, поддерживающим до 32 устройств ZigBee (35/90 м в помещении и на открытом пространстве соответственно);
- Ethernet Shield – с установленным портом стандарта Ethernet 10/100 Base-T для проводного сетевого соединения;
- Motor Shield – с портами для управления двигателями постоянного тока и получения сигналов обратной связи от датчиков положения.
При необходимости можно найти и другие конфигурации полностью совместимых контроллеров, выпускаемые сторонними разработчиками. Полный список одобренного оборудования размещен на странице https://playground.arduino.cc/Main/SimilarBoards/ официального сайта.
При выборе контроллера необходимо учитывать:
- Производительность;
- Наличие необходимого количества портов ввода/вывода, цифровых и аналоговых;
- Объем памяти для хранения программ и данных (все платы Arduino используют небогатые ресурсы микроконтроллера и не предполагают расширений);
- Удобство работы – программирования, отладки программ, установки готового устройства в корпус.
Для решения рассматриваемой задачи с освещением на крыльце вполне достаточно компактным Micro, Nano или Mini, но с базовой Uno работать гораздо удобнее. Кроме того, понадобится плата расширения Xbee Shield для работы c ZigBee устройствами.
Выбор периферии
При выборе датчиков и исполнительных механизмов нет значительных ограничений. Единственное требование – обеспечить совместимость с портами Arduino по уровням сигналов и нагрузке.
Однако, при желании, и это требование легко обходится за счет сборки собственных или использования готовых плат согласования.
Разработка принципиальной схемы
После покупки контроллера и периферийных устройств следует начертить принципиальную схему системы автоматизации. С платами Arduino это труда не составит, главная задача разработчика – выбрать пины портов ввода/вывода для подключения – это важная информация для написания программы.
К сведению! Поменять выводы на этапе разработки программы не сложно – достаточно откорректировать буквально 2 строки кода.
Работа с программным обеспечением
Когда принципиальная схема готова, начинается важнейший этап проектирования – написание программы для контроллера. Для этого необходимо скачать среду разработки Arduino IDE.
Загрузка, установка, проверка ПО
Программное обеспечение скачивают со страницы официального сайта https://www.arduino.cc/en/software.
Стабильная версия – Arduino IDE 1.8.13 поддерживает:
- Windows 7 и более новые версии ОС, х86 и х64;
- MacOS 10.10 и новее;
- 32- и 64-битные версии Linux и Linux ARM.
Для работы под Windows можно скачать установщик или ZIP-архив софта. Использовать установщик для неопытных пользователей предпочтительнее – установка драйверов будет произведена автоматически вместе с установкой программы.
При использовании ZIP-архива достаточно развернуть программу на жестком диске ПК и запустить IDE. В этом случае программа также попытается установить драйвера, но, возможно, придется обновить их вручную в Панели управления. Все необходимые .inf файлы входят в комплект поставки.
К сведению! Опытные пользователи могут попробовать бета-версию Arduino IDE 2.0 с улучшенной функциональностью, поддержкой Win 10, 32- или 64-разрядных Linux-систем, MacOS 10-14.
Возможности среды разработки Arduino IDE:
- Создание проектов (скетчей, от англ. sketch – набросок).
- Их проверка и компиляция для загрузки в контроллер;
- «Заливка» готового машинного кода в контроллеры;
- Поддержка всех версий плат;
- Подключение библиотек, не входящих в комплект поставки.
После установки софта следует проверить работоспособность купленного контроллера и целостность софта.
Для этого достаточно выполнить входящий в комплект поставки простейший скетч с управлением светоиодом.
Пошагово процесс выглядит следующим образом:
- Подключить плату Arduino Uno (именно на ней остановился выбор для реализации предложенной задачи) кабелем к USB-порту компьютера.
- Запустить Arduino IDE.
- В среде разработки открыть готовый скетч – в меню File выбрать папку Examples-1.Basic, в ней файл Blink.
- Выбрать плату контроллера для работы – меню Tools-Board.
- Указать порт для связи с платой (как правило COM3 или другой COM с бОльшим номером). Если этих портов нет, следует проверить, подключена ли плата или установить вручную драйверы.
- Откомпилировать скетч через меню Sketch-Verify/Compile или нажатием на соответствующую кнопку в панели инструментов под строкой меню.
- Загрузить готовый скетч в контроллер (Sketch-Upload) или нажатием кнопки панели инструментов. На этом этапе можно наблюдать мигание светодиодов Rx и Tx , которое свидетельствует об обмене с ПК.
- После окончания загрузки через несколько секунд начнет мигать светодиод на плате Uno. Это говорит о том, что и контроллер и среда разработки полностью работоспособны.
Внимание! Если скетч не загружается, следует нажать кнопку Reset на плате контролера и повторить процедуру загрузки. Аналогичным образом следует поступать перед каждой новой загрузкой, особенно на платах типа Mini.
После проверки можно приступать к разработке собственной программы.
Программирование скетчей
Программирование скетча можно выполнить непосредственно в редакторе среды разработки или в любом другом удобном текстовом редакторе (в последнем случае не забыть сохранить работу в файле .ino). Встроенный язык программирования Arduino является клоном языка C++ с некоторыми упрощениями и дополнительными функциями и библиотеками для обращения к функционалу контроллера.
Для работы с программой в IDE необходимо:
- Создать новый скетч (File-New).
- Подключить необходимые библиотеки. Стандартные библиотеки функций входят в комплект поставки, нестандартные нужно разместить в соответствующих папках папки Libraries. После этого их имена станут доступны разработчику в меню Sketch-Import Library. Достаточно выбрать нужные имена, и они будут включены для обработки препроцессором.
- В функции setup() прописать все необходимые действия для инициализации системы. Эта функция выполняется один раз перед стартом. Как правило, в ее тексте достаточно ограничиться назначением функций пинам ввода/вывода.
- В функции loop() прописать код, реализующий алгоритм автоматизации – опрос сенсоров, анализ условий, выдачу сигналов на исполнительные механизмы. Функция выполняется в бесконечном цикле, операторы прерывания этого цикла не предусмотрены.
- Откомпилировать написанный скетч.
- Загрузить его в контроллер.
Отличия языка Arduino от стандарта C++
- Не требуется включения заголовочных файлов (хидеров, файлов с расширением .h)в текст программы, препроцессор добавит их автоматически в соответствии с импортированными для скетча библиотеками.
- Добавлены предопределенные константы для уровней (HIGH и LOW) и функций выводов портов ввода/вывода (INPUT и OUTPUT).
- Добавлены функции для работы:
- c цифровыми портами ввода/вывода pinMode(), digitalWrite(), digitalRead();
- с аналоговыми пинами analogReference(), analogRead(), analogWrite();
- дополнительными IO функциями, например, побитного вывода со сдвигом shiftOut();
- временем mills() – время в мс, micros() время в мкс, delay() – задержка в мс, delayMicroseconds – задержка в мкс;
- внешними прерываниями attachInterrupt() и detachInterrupt();
- последовательным портом.
- В комплект поставки включены библиотеки для сервоприводов (Servo), шаговых двигателей (Steps), EEPROM, SPI-интерфейса.
В остальном полностью поддерживается стандарт языка, включая директивы компилятора, константы и типы данных, операторы (в т.ч. унарные), функции.
Со всеми платами контролеров и расширений поставляются необходимые библиотеки для работы со всем аппаратным обеспечением. Кроме того, в сети доступны тысячи готовых библиотек разработанных сообществом. Подобрать нужную (с документацией) можно по ссылкам на официальном сайте https://playground.arduino.cc/Main/LibraryList/ и https://www.arduinolibraries.info/ или на GitHub.
Соответственно, для реализации поставленной задачи разработчику нужно:
- Создать скетч.
- Скачать и подключить библиотеку для работы с Xbee (ZigBee).
- Выполнить назначение портов для опроса датчиков в функции setup();
- Инициализировать работу с интерфейсом ZigBee в setup();
- Прописать опрос датчиков и выдачу команды управления по условиям в loop().
Работать с Arduino можно и без установки IDE. Для этого удобно использовать:
- Web-редактор на официальном сайте. Полностью поддерживает синтаксис (с подсветкой), включает все необходимые для работы библиотеки. Альтернативный вариант – любой тестовый редактор.
- Компилятор avr-gcc.
- Программатор, поддерживающий чипы микроконтроллеров, используемых на платах Arduino,
Для пользователей, далеких от программирования на любых языках, созданы альтернативные варианты разработки проектов – визуальные. Среди наиболее известных:
- Scratch (http://s4a.cat);
- Snap (http://snap4arduino.rocks/);
- Ardublock (http://ardublock.com);
- XOD (https://xod.io/).
Таким образом, умный дом на Arduino своими руками – решение, доступное практически каждому. Ассортимент аппаратных средств позволяет решать задачи от простейших до максимально сложных (в том числе, за счет взаимодействия нескольких контролеров).
Способствует этому и накопленный сообществом богатый опыт, и полная открытость проекта, благодаря которой можно найти готовые программные разработки для большинства процессов home automation.